package com.sojson.dao;

import java.util.List;

import com.sojson.base.BaseDao;
import com.sojson.entity.po.UserRole;

/**
 * 用户和角色关联表Dao
 * 
 * @author liu
 * @date 2021-04-15
 */
public interface UserRoleDao extends BaseDao<UserRole> {

    /**
     * 通过roleId删除(物理删除)
     * 
     * @param roleId
     * @return
     */
    int deleteByRoleId(Integer roleId);

    /**
     * 通过roleId列表删除(物理删除)
     * 
     * @param roleIds
     * @return
     */
    int deleteByRoleIdList(List<Integer> roleIds);

    /**
     * 通过roleId更新(全部更新)
     * 
     * @param userRole
     * @return
     */
    int updateByRoleId(UserRole userRole);

    /**
     * 通过roleId列表更新(全部更新)(更新内容相同)
     * 
     * @param userRole
     * @return
     */
    int updateStaticByRoleIdList(UserRole userRole);

    /**
     * 通过roleId列表更新(全部更新)(更新内容不相同)
     * 
     * @param userRoles
     * @return
     */
    int updateChangeByRoleIdList(List<UserRole> userRoles);

    /**
     * 通过roleId更新(局部更新)
     * 
     * @param userRole
     * @return
     */
    int updatePartialByRoleId(UserRole userRole);

    /**
     * 通过roleId列表更新(局部更新)(更新内容相同)
     * 
     * @param userRole
     * @return
     */
    int updateStaticPartialByRoleIdList(UserRole userRole);

    /**
     * 通过roleId列表更新(局部更新)(更新内容不相同)
     * 
     * @param userRoles
     * @return
     */
    int updateChangePartialByRoleIdList(List<UserRole> userRoles);

    /**
     * 通过roleId查询
     * 
     * @param roleId
     * @return
     */
    UserRole findByRoleId(Integer roleId);

    /**
     * 通过roleId列表查询
     * 
     * @param roleIds
     * @return
     */
    List<UserRole> findByRoleIdList(List<Integer> roleIds);

    /**
     * 通过对象查询roleId列表
     * 
     * @param userRole
     * @return
     */
    List<Integer> findRoleIdByDto(UserRole userRole);

    /**
     * 通过userId删除(物理删除)
     * 
     * @param userId
     * @return
     */
    int deleteByUserId(Integer userId);

    /**
     * 通过userId列表删除(物理删除)
     * 
     * @param userIds
     * @return
     */
    int deleteByUserIdList(List<Integer> userIds);

    /**
     * 通过userId更新(全部更新)
     * 
     * @param userRole
     * @return
     */
    int updateByUserId(UserRole userRole);

    /**
     * 通过userId列表更新(全部更新)(更新内容相同)
     * 
     * @param userRole
     * @return
     */
    int updateStaticByUserIdList(UserRole userRole);

    /**
     * 通过userId列表更新(全部更新)(更新内容不相同)
     * 
     * @param userRoles
     * @return
     */
    int updateChangeByUserIdList(List<UserRole> userRoles);

    /**
     * 通过userId更新(局部更新)
     * 
     * @param userRole
     * @return
     */
    int updatePartialByUserId(UserRole userRole);

    /**
     * 通过userId列表更新(局部更新)(更新内容相同)
     * 
     * @param userRole
     * @return
     */
    int updateStaticPartialByUserIdList(UserRole userRole);

    /**
     * 通过userId列表更新(局部更新)(更新内容不相同)
     * 
     * @param userRoles
     * @return
     */
    int updateChangePartialByUserIdList(List<UserRole> userRoles);

    /**
     * 通过userId查询
     * 
     * @param userId
     * @return
     */
    UserRole findByUserId(Integer userId);

    /**
     * 通过userId列表查询
     * 
     * @param userIds
     * @return
     */
    List<UserRole> findByUserIdList(List<Integer> userIds);

    /**
     * 通过对象查询userId列表
     * 
     * @param userRole
     * @return
     */
    List<Integer> findUserIdByDto(UserRole userRole);

    /**
     * 清空数据(物理清空)
     */
    void clear();

    /**
     * 通过角色ID查询角色使用数量
     *
     * @param roleId 角色ID
     * @return 结果
     */
    int countUserRoleByRoleId(Integer roleId);

}